#include <iostream>
#include <string>
using namespace std;

void Reverse(string& dest)
{
    size_t begin = 0;
    size_t end = dest.size() - 1;
    while (begin < end)
        swap(dest[begin++], dest[end--]);
}

string addStrings(string num1, string num2)
{
    string result;
    int pos1 = num1.size() - 1;
    int pos2 = num2.size() - 1;
    int flag = 0;
    while (pos1 >= 0 || pos2 >= 0)
    {
        int num = 0;
        num += flag;
        flag = 0;
        if (pos1 >= 0)
            num += num1[pos1] - '0';
        if (pos2 >= 0)
            num += num2[pos2] - '0';
        --pos1;
        --pos2;
        if (num >= 10)
        {
            flag = 1;
            num -= 10;
        }
        result.append(1, num + '0');
    }
    if (flag != 0)
        result.append(1, '1');
    Reverse(result);
    return result;
}

string Singel_Multiply(string& dest, int num)
{
    string result(dest);
    string::reverse_iterator it = result.rbegin();
    int flag = 0;
    while (it != result.rend())
    {
        int tmp = *it - '0';
        tmp = num * tmp + flag;
        flag = tmp / 10;
        *it = tmp % 10 + '0';
        ++it;
    }
    if (flag != 0)
        result.insert(0, 1, flag + '0');
    return result;
}

string multiply(string num1, string num2)
{
    string tmp;
    string::reverse_iterator it = num2.rbegin();
    while (it != num2.rend())
    {
        tmp = addStrings(tmp, Singel_Multiply(num1, *it - '0'));
        num1.append(1, '0');
        ++it;
    }
    if (tmp[0] == '0')
        return (string)"0";
    return tmp;
}

int main()
{
    string x("1234");
    string y("0");
    cout << multiply(x, y) << endl;

    return 0;
}



//class Solution 
//{
//public:
//    int firstUniqChar(string s) 
//    {
//        int tmp[26] = { 0 };
//        string::iterator it = s.begin();
//        while (it != s.end())
//        {
//            ++tmp[(*it) - 'a'];
//            ++it;
//        }
//        it = s.begin();
//        while (it != s.end())
//        {
//            if (tmp[(*it) - 'a'] == 1)
//                return (int)(it - s.begin());
//            ++it;
//        }
//        return -1;
//    }
//};

//
//int main()
//{
//    string tmp;
//    getline(cin, tmp);
//    size_t pos = tmp.rfind(' ');
//    cout << tmp.size() - pos - 1 << endl;
//
//    return 0;
//}


//void Reverse(string& dest)
//{
//    int begin = 0;
//    int end = dest.size() - 1;
//    while (begin < end)
//        swap(dest[begin++], dest[end--]);
//}
//
//class Solution
//{
//public:
//    string addStrings(string num1, string num2)
//    {
//        string result("");
//        int pos1 = num1.size() - 1;
//        int pos2 = num2.size() - 1;
//        int flag = 0;
//        while (pos1 >= 0 || pos2 >= 0)
//        {
//            int num = 0;
//            num += flag;
//            flag = 0;
//            if (pos1 >= 0)
//                num += num1[pos1] - '0';
//            if (pos2 >= 0)
//                num += num2[pos2] - '0';
//            if (num >= 10)
//            {
//                flag = 1;
//                num -= 10;
//            }
//            result.append(1, num + '0');
//        }
//        Reverse(result);
//    }
//};